dynamics_discrete_elements Module

Discrete (lumped-parameter) spring, viscous damper, and point mass elements for 2D and 3D structural analyses.

Spring and damper elements connect two nodes and act along a single unit axis . By default, the axis runs from node 1 to node 2; however, a user-defined axis may be supplied, which permits zero-length (coincident node) elements. Defining the global spring stiffness and damper damping matrices are

The point mass element is attached to a single node and contributes a translational mass matrix

Each element carries only translational degrees of freedom (x and y in 2D; x, y, and z in 3D). When assembled against nodes carrying additional degrees of freedom (e.g. beam nodes), the element degrees of freedom map onto the leading translational degrees of freedom of each node.



Contents


Interfaces

public interface assemble_damping_matrix

  • private subroutine assemble_damping_matrix_dense(gdof, elements, nodes, c)

    Assembles a dense global damping matrix from a collection of discrete elements.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int32), intent(in) :: gdof

    The total number of global degrees of freedom.

    class(discrete_element), intent(in), dimension(:) :: elements

    The discrete elements to assemble.

    class(node), intent(in), dimension(:) :: nodes

    The global node list.

    real(kind=real64), intent(out), allocatable, dimension(:,:) :: c

    The assembled gdof-by-gdof global damping matrix.

  • private subroutine assemble_damping_matrix_csr(gdof, elements, nodes, c)

    Assembles a global damping matrix, in CSR format, from a collection of discrete elements.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int32), intent(in) :: gdof

    The total number of global degrees of freedom.

    class(discrete_element), intent(in), dimension(:) :: elements

    The discrete elements to assemble.

    class(node), intent(in), dimension(:) :: nodes

    The global node list.

    type(csr_matrix), intent(out) :: c

    The assembled gdof-by-gdof global damping matrix in CSR format.

public interface assemble_discrete_system

  • private subroutine assemble_discrete_system_dense(gdof, masses, dampers, springs, nodes, m, c, k)

    Assembles the dense global mass, damping, and stiffness matrices of a system composed of discrete elements. The mass, damping, and stiffness contributions of every element in each collection are assembled; therefore, any discrete element type may be supplied in any collection. A zero-sized array may be supplied for any collection that is not required.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int32), intent(in) :: gdof

    The total number of global degrees of freedom.

    class(discrete_element), intent(in), dimension(:) :: masses

    The mass elements to assemble.

    class(discrete_element), intent(in), dimension(:) :: dampers

    The damper elements to assemble.

    class(discrete_element), intent(in), dimension(:) :: springs

    The spring elements to assemble.

    class(node), intent(in), dimension(:) :: nodes

    The global node list.

    real(kind=real64), intent(out), allocatable, dimension(:,:) :: m

    The assembled gdof-by-gdof global mass matrix.

    real(kind=real64), intent(out), allocatable, dimension(:,:) :: c

    The assembled gdof-by-gdof global damping matrix.

    real(kind=real64), intent(out), allocatable, dimension(:,:) :: k

    The assembled gdof-by-gdof global stiffness matrix.

  • private subroutine assemble_discrete_system_csr(gdof, masses, dampers, springs, nodes, m, c, k)

    Assembles the global mass, damping, and stiffness matrices, in CSR format, of a system composed of discrete elements. The mass, damping, and stiffness contributions of every element in each collection are assembled; therefore, any discrete element type may be supplied in any collection. A zero-sized array may be supplied for any collection that is not required.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int32), intent(in) :: gdof

    The total number of global degrees of freedom.

    class(discrete_element), intent(in), dimension(:) :: masses

    The mass elements to assemble.

    class(discrete_element), intent(in), dimension(:) :: dampers

    The damper elements to assemble.

    class(discrete_element), intent(in), dimension(:) :: springs

    The spring elements to assemble.

    class(node), intent(in), dimension(:) :: nodes

    The global node list.

    type(csr_matrix), intent(out) :: m

    The assembled gdof-by-gdof global mass matrix in CSR format.

    type(csr_matrix), intent(out) :: c

    The assembled gdof-by-gdof global damping matrix in CSR format.

    type(csr_matrix), intent(out) :: k

    The assembled gdof-by-gdof global stiffness matrix in CSR format.

public interface damper_element_2d

  • private pure function dp2d_init(c, nd1, nd2, direction) result(rst)

    Initializes a new [[damper_element_2d]].

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in) :: c

    The viscous damping coefficient.

    class(node), intent(in) :: nd1

    The first node of the element.

    class(node), intent(in) :: nd2

    The second node of the element.

    real(kind=real64), intent(in), optional, dimension(:) :: direction

    An optional 2-element vector defining the damper axis. The vector must be non-zero and is normalized internally. If not supplied, the axis is defined by the vector from node 1 to node 2, in which case the nodes must not be coincident.

    Return Value type(damper_element_2d)

    The new [[damper_element_2d]].

public interface damper_element_3d

  • private pure function dp3d_init(c, nd1, nd2, direction) result(rst)

    Initializes a new [[damper_element_3d]].

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in) :: c

    The viscous damping coefficient.

    class(node), intent(in) :: nd1

    The first node of the element.

    class(node), intent(in) :: nd2

    The second node of the element.

    real(kind=real64), intent(in), optional, dimension(:) :: direction

    An optional 3-element vector defining the damper axis. The vector must be non-zero and is normalized internally. If not supplied, the axis is defined by the vector from node 1 to node 2, in which case the nodes must not be coincident.

    Return Value type(damper_element_3d)

    The new [[damper_element_3d]].

public interface mass_element_2d

  • private pure function me2d_init(m, nd) result(rst)

    Initializes a new [[mass_element_2d]].

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in) :: m

    The mass.

    class(node), intent(in) :: nd

    The node to which the mass is attached.

    Return Value type(mass_element_2d)

    The new [[mass_element_2d]].

public interface mass_element_3d

  • private pure function me3d_init(m, nd) result(rst)

    Initializes a new [[mass_element_3d]].

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in) :: m

    The mass.

    class(node), intent(in) :: nd

    The node to which the mass is attached.

    Return Value type(mass_element_3d)

    The new [[mass_element_3d]].

public interface spring_element_2d

  • private pure function se2d_init(k, nd1, nd2, direction) result(rst)

    Initializes a new [[spring_element_2d]].

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in) :: k

    The spring stiffness.

    class(node), intent(in) :: nd1

    The first node of the element.

    class(node), intent(in) :: nd2

    The second node of the element.

    real(kind=real64), intent(in), optional, dimension(:) :: direction

    An optional 2-element vector defining the spring axis. The vector must be non-zero and is normalized internally. If not supplied, the axis is defined by the vector from node 1 to node 2, in which case the nodes must not be coincident.

    Return Value type(spring_element_2d)

    The new [[spring_element_2d]].

public interface spring_element_3d

  • private pure function se3d_init(k, nd1, nd2, direction) result(rst)

    Initializes a new [[spring_element_3d]].

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in) :: k

    The spring stiffness.

    class(node), intent(in) :: nd1

    The first node of the element.

    class(node), intent(in) :: nd2

    The second node of the element.

    real(kind=real64), intent(in), optional, dimension(:) :: direction

    An optional 3-element vector defining the spring axis. The vector must be non-zero and is normalized internally. If not supplied, the axis is defined by the vector from node 1 to node 2, in which case the nodes must not be coincident.

    Return Value type(spring_element_3d)

    The new [[spring_element_3d]].


Derived Types

type, public, extends(two_node_discrete_element) ::  damper_element

Defines a linear, axial viscous damper element. When evaluated with nodal velocities, the element "strain" is the elongation rate and the element "stress" is the damper force (positive in tension).

Components

Type Visibility Attributes Name Initial
real(kind=real64), public :: damping_coefficient

The viscous damping coefficient.

real(kind=real64), public, dimension(3) :: direction = 0.0d0

The unit vector defining the user-supplied element axis. Only the leading components corresponding to the element dimensionality are used. This value is used only if use_direction is true.

type(material), public :: material

The material.

type(node), public :: node_1

The first node of the element (s = -1).

type(node), public :: node_2

The second node of the element (s = 1).

logical, public :: use_direction = .false.

True if the element axis is defined by direction; else, false if the axis is defined by the vector from node 1 to node 2.

Type-Bound Procedures

procedure , public :: axis => tnde_axis Function
procedure , public :: constitutive_matrix => dp_constitutive_matrix Function
procedure , public :: damping_matrix => dp_damping_matrix Function
procedure , public :: evaluate_shape_function => tnde_shape_function Function
procedure , public :: external_force_vector => de_ext_force_vector Function
procedure (element_query) , public , pass :: get_dimensionality
procedure , public :: get_dof_per_node => tnde_dof_per_node Function
procedure , public :: get_node => tnde_get_node Function
procedure , public :: get_node_count => tnde_get_node_count Function
procedure , public :: get_node_natural_coordinates => de_get_node_natural_coordinates Function
procedure , public :: jacobian => de_jacobian Function
procedure , public :: mass_matrix => de_mass_matrix Function
procedure , public :: shape_function_matrix => tnde_shape_function_matrix Function
procedure , public :: stiffness_matrix => de_stiffness_matrix Function
procedure , public :: strain => e_strain Function
procedure , public :: strain_displacement_matrix => tnde_strain_disp_matrix Function
procedure , public :: stress => e_stress Function

type, public, extends(damper_element) ::  damper_element_2d

Defines a 2D linear, axial viscous damper element with x and y translations at each node.

Components

Type Visibility Attributes Name Initial
real(kind=real64), public :: damping_coefficient

The viscous damping coefficient.

real(kind=real64), public, dimension(3) :: direction = 0.0d0

The unit vector defining the user-supplied element axis. Only the leading components corresponding to the element dimensionality are used. This value is used only if use_direction is true.

type(material), public :: material

The material.

type(node), public :: node_1

The first node of the element (s = -1).

type(node), public :: node_2

The second node of the element (s = 1).

logical, public :: use_direction = .false.

True if the element axis is defined by direction; else, false if the axis is defined by the vector from node 1 to node 2.

Constructor

private pure function dp2d_init (c, nd1, nd2, direction)

Initializes a new [[damper_element_2d]].

Type-Bound Procedures

procedure , public :: axis => tnde_axis Function
procedure , public :: constitutive_matrix => dp_constitutive_matrix Function
procedure , public :: damping_matrix => dp_damping_matrix Function
procedure , public :: evaluate_shape_function => tnde_shape_function Function
procedure , public :: external_force_vector => de_ext_force_vector Function
procedure , public :: get_dimensionality => dp2d_dimensionality Function
procedure , public :: get_dof_per_node => tnde_dof_per_node Function
procedure , public :: get_node => tnde_get_node Function
procedure , public :: get_node_count => tnde_get_node_count Function
procedure , public :: get_node_natural_coordinates => de_get_node_natural_coordinates Function
procedure , public :: jacobian => de_jacobian Function
procedure , public :: mass_matrix => de_mass_matrix Function
procedure , public :: shape_function_matrix => tnde_shape_function_matrix Function
procedure , public :: stiffness_matrix => de_stiffness_matrix Function
procedure , public :: strain => e_strain Function
procedure , public :: strain_displacement_matrix => tnde_strain_disp_matrix Function
procedure , public :: stress => e_stress Function

type, public, extends(damper_element) ::  damper_element_3d

Defines a 3D linear, axial viscous damper element with x, y, and z translations at each node.

Components

Type Visibility Attributes Name Initial
real(kind=real64), public :: damping_coefficient

The viscous damping coefficient.

real(kind=real64), public, dimension(3) :: direction = 0.0d0

The unit vector defining the user-supplied element axis. Only the leading components corresponding to the element dimensionality are used. This value is used only if use_direction is true.

type(material), public :: material

The material.

type(node), public :: node_1

The first node of the element (s = -1).

type(node), public :: node_2

The second node of the element (s = 1).

logical, public :: use_direction = .false.

True if the element axis is defined by direction; else, false if the axis is defined by the vector from node 1 to node 2.

Constructor

private pure function dp3d_init (c, nd1, nd2, direction)

Initializes a new [[damper_element_3d]].

Type-Bound Procedures

procedure , public :: axis => tnde_axis Function
procedure , public :: constitutive_matrix => dp_constitutive_matrix Function
procedure , public :: damping_matrix => dp_damping_matrix Function
procedure , public :: evaluate_shape_function => tnde_shape_function Function
procedure , public :: external_force_vector => de_ext_force_vector Function
procedure , public :: get_dimensionality => dp3d_dimensionality Function
procedure , public :: get_dof_per_node => tnde_dof_per_node Function
procedure , public :: get_node => tnde_get_node Function
procedure , public :: get_node_count => tnde_get_node_count Function
procedure , public :: get_node_natural_coordinates => de_get_node_natural_coordinates Function
procedure , public :: jacobian => de_jacobian Function
procedure , public :: mass_matrix => de_mass_matrix Function
procedure , public :: shape_function_matrix => tnde_shape_function_matrix Function
procedure , public :: stiffness_matrix => de_stiffness_matrix Function
procedure , public :: strain => e_strain Function
procedure , public :: strain_displacement_matrix => tnde_strain_disp_matrix Function
procedure , public :: stress => e_stress Function

type, public, extends(element) ::  discrete_element

Defines a discrete (lumped-parameter) element. Discrete elements have no spatial extent; therefore, the stiffness, mass, and damping matrices default to zero and are overridden only where the element contributes to the system. The inherited material is unused.

Components

Type Visibility Attributes Name Initial
type(material), public :: material

The material.

Type-Bound Procedures

procedure (element_const_matrix_function) , public , pass :: constitutive_matrix
procedure , public :: damping_matrix => de_damping_matrix Function
procedure (element_shape_function) , public , pass :: evaluate_shape_function
procedure , public :: external_force_vector => de_ext_force_vector Function
procedure (element_query) , public , pass :: get_dimensionality
procedure (element_query) , public , pass :: get_dof_per_node
procedure (element_get_node) , public , pass :: get_node
procedure (element_query) , public , pass :: get_node_count
procedure , public :: get_node_natural_coordinates => de_get_node_natural_coordinates Function
procedure , public :: jacobian => de_jacobian Function
procedure , public :: mass_matrix => de_mass_matrix Function
procedure (element_matrix_function) , public , pass :: shape_function_matrix
procedure , public :: stiffness_matrix => de_stiffness_matrix Function
procedure , public :: strain => e_strain Function
procedure (element_matrix_function) , public , pass :: strain_displacement_matrix
procedure , public :: stress => e_stress Function

type, public, extends(discrete_element) ::  mass_element

Defines a translational point mass element attached to a single node.

Components

Type Visibility Attributes Name Initial
real(kind=real64), public :: mass

The mass.

type(material), public :: material

The material.

type(node), public :: node_1

The node to which the mass is attached.

Type-Bound Procedures

procedure , public :: constitutive_matrix => me_constitutive_matrix Function
procedure , public :: damping_matrix => de_damping_matrix Function
procedure , public :: evaluate_shape_function => me_shape_function Function
procedure , public :: external_force_vector => de_ext_force_vector Function
procedure (element_query) , public , pass :: get_dimensionality
procedure , public :: get_dof_per_node => me_dof_per_node Function
procedure , public :: get_node => me_get_node Function
procedure , public :: get_node_count => me_get_node_count Function
procedure , public :: get_node_natural_coordinates => de_get_node_natural_coordinates Function
procedure , public :: jacobian => de_jacobian Function
procedure , public :: mass_matrix => me_mass_matrix Function
procedure , public :: shape_function_matrix => me_shape_function_matrix Function
procedure , public :: stiffness_matrix => de_stiffness_matrix Function
procedure , public :: strain => e_strain Function
procedure , public :: strain_displacement_matrix => me_strain_disp_matrix Function
procedure , public :: stress => e_stress Function

type, public, extends(mass_element) ::  mass_element_2d

Defines a 2D translational point mass element with x and y translations.

Components

Type Visibility Attributes Name Initial
real(kind=real64), public :: mass

The mass.

type(material), public :: material

The material.

type(node), public :: node_1

The node to which the mass is attached.

Constructor

private pure function me2d_init (m, nd)

Initializes a new [[mass_element_2d]].

Type-Bound Procedures

procedure , public :: constitutive_matrix => me_constitutive_matrix Function
procedure , public :: damping_matrix => de_damping_matrix Function
procedure , public :: evaluate_shape_function => me_shape_function Function
procedure , public :: external_force_vector => de_ext_force_vector Function
procedure , public :: get_dimensionality => me2d_dimensionality Function
procedure , public :: get_dof_per_node => me_dof_per_node Function
procedure , public :: get_node => me_get_node Function
procedure , public :: get_node_count => me_get_node_count Function
procedure , public :: get_node_natural_coordinates => de_get_node_natural_coordinates Function
procedure , public :: jacobian => de_jacobian Function
procedure , public :: mass_matrix => me_mass_matrix Function
procedure , public :: shape_function_matrix => me_shape_function_matrix Function
procedure , public :: stiffness_matrix => de_stiffness_matrix Function
procedure , public :: strain => e_strain Function
procedure , public :: strain_displacement_matrix => me_strain_disp_matrix Function
procedure , public :: stress => e_stress Function

type, public, extends(mass_element) ::  mass_element_3d

Defines a 3D translational point mass element with x, y, and z translations.

Components

Type Visibility Attributes Name Initial
real(kind=real64), public :: mass

The mass.

type(material), public :: material

The material.

type(node), public :: node_1

The node to which the mass is attached.

Constructor

private pure function me3d_init (m, nd)

Initializes a new [[mass_element_3d]].

Type-Bound Procedures

procedure , public :: constitutive_matrix => me_constitutive_matrix Function
procedure , public :: damping_matrix => de_damping_matrix Function
procedure , public :: evaluate_shape_function => me_shape_function Function
procedure , public :: external_force_vector => de_ext_force_vector Function
procedure , public :: get_dimensionality => me3d_dimensionality Function
procedure , public :: get_dof_per_node => me_dof_per_node Function
procedure , public :: get_node => me_get_node Function
procedure , public :: get_node_count => me_get_node_count Function
procedure , public :: get_node_natural_coordinates => de_get_node_natural_coordinates Function
procedure , public :: jacobian => de_jacobian Function
procedure , public :: mass_matrix => me_mass_matrix Function
procedure , public :: shape_function_matrix => me_shape_function_matrix Function
procedure , public :: stiffness_matrix => de_stiffness_matrix Function
procedure , public :: strain => e_strain Function
procedure , public :: strain_displacement_matrix => me_strain_disp_matrix Function
procedure , public :: stress => e_stress Function

type, public, extends(two_node_discrete_element) ::  spring_element

Defines a linear, axial spring element. The element "strain" is the spring elongation and the element "stress" is the spring force (positive in tension).

Components

Type Visibility Attributes Name Initial
real(kind=real64), public, dimension(3) :: direction = 0.0d0

The unit vector defining the user-supplied element axis. Only the leading components corresponding to the element dimensionality are used. This value is used only if use_direction is true.

type(material), public :: material

The material.

type(node), public :: node_1

The first node of the element (s = -1).

type(node), public :: node_2

The second node of the element (s = 1).

real(kind=real64), public :: stiffness

The spring stiffness.

logical, public :: use_direction = .false.

True if the element axis is defined by direction; else, false if the axis is defined by the vector from node 1 to node 2.

Type-Bound Procedures

procedure , public :: axis => tnde_axis Function
procedure , public :: constitutive_matrix => se_constitutive_matrix Function
procedure , public :: damping_matrix => de_damping_matrix Function
procedure , public :: evaluate_shape_function => tnde_shape_function Function
procedure , public :: external_force_vector => de_ext_force_vector Function
procedure (element_query) , public , pass :: get_dimensionality
procedure , public :: get_dof_per_node => tnde_dof_per_node Function
procedure , public :: get_node => tnde_get_node Function
procedure , public :: get_node_count => tnde_get_node_count Function
procedure , public :: get_node_natural_coordinates => de_get_node_natural_coordinates Function
procedure , public :: jacobian => de_jacobian Function
procedure , public :: mass_matrix => de_mass_matrix Function
procedure , public :: shape_function_matrix => tnde_shape_function_matrix Function
procedure , public :: stiffness_matrix => se_stiffness_matrix Function
procedure , public :: strain => e_strain Function
procedure , public :: strain_displacement_matrix => tnde_strain_disp_matrix Function
procedure , public :: stress => e_stress Function

type, public, extends(spring_element) ::  spring_element_2d

Defines a 2D linear, axial spring element with x and y translations at each node.

Components

Type Visibility Attributes Name Initial
real(kind=real64), public, dimension(3) :: direction = 0.0d0

The unit vector defining the user-supplied element axis. Only the leading components corresponding to the element dimensionality are used. This value is used only if use_direction is true.

type(material), public :: material

The material.

type(node), public :: node_1

The first node of the element (s = -1).

type(node), public :: node_2

The second node of the element (s = 1).

real(kind=real64), public :: stiffness

The spring stiffness.

logical, public :: use_direction = .false.

True if the element axis is defined by direction; else, false if the axis is defined by the vector from node 1 to node 2.

Constructor

private pure function se2d_init (k, nd1, nd2, direction)

Initializes a new [[spring_element_2d]].

Type-Bound Procedures

procedure , public :: axis => tnde_axis Function
procedure , public :: constitutive_matrix => se_constitutive_matrix Function
procedure , public :: damping_matrix => de_damping_matrix Function
procedure , public :: evaluate_shape_function => tnde_shape_function Function
procedure , public :: external_force_vector => de_ext_force_vector Function
procedure , public :: get_dimensionality => se2d_dimensionality Function
procedure , public :: get_dof_per_node => tnde_dof_per_node Function
procedure , public :: get_node => tnde_get_node Function
procedure , public :: get_node_count => tnde_get_node_count Function
procedure , public :: get_node_natural_coordinates => de_get_node_natural_coordinates Function
procedure , public :: jacobian => de_jacobian Function
procedure , public :: mass_matrix => de_mass_matrix Function
procedure , public :: shape_function_matrix => tnde_shape_function_matrix Function
procedure , public :: stiffness_matrix => se_stiffness_matrix Function
procedure , public :: strain => e_strain Function
procedure , public :: strain_displacement_matrix => tnde_strain_disp_matrix Function
procedure , public :: stress => e_stress Function

type, public, extends(spring_element) ::  spring_element_3d

Defines a 3D linear, axial spring element with x, y, and z translations at each node.

Components

Type Visibility Attributes Name Initial
real(kind=real64), public, dimension(3) :: direction = 0.0d0

The unit vector defining the user-supplied element axis. Only the leading components corresponding to the element dimensionality are used. This value is used only if use_direction is true.

type(material), public :: material

The material.

type(node), public :: node_1

The first node of the element (s = -1).

type(node), public :: node_2

The second node of the element (s = 1).

real(kind=real64), public :: stiffness

The spring stiffness.

logical, public :: use_direction = .false.

True if the element axis is defined by direction; else, false if the axis is defined by the vector from node 1 to node 2.

Constructor

private pure function se3d_init (k, nd1, nd2, direction)

Initializes a new [[spring_element_3d]].

Type-Bound Procedures

procedure , public :: axis => tnde_axis Function
procedure , public :: constitutive_matrix => se_constitutive_matrix Function
procedure , public :: damping_matrix => de_damping_matrix Function
procedure , public :: evaluate_shape_function => tnde_shape_function Function
procedure , public :: external_force_vector => de_ext_force_vector Function
procedure , public :: get_dimensionality => se3d_dimensionality Function
procedure , public :: get_dof_per_node => tnde_dof_per_node Function
procedure , public :: get_node => tnde_get_node Function
procedure , public :: get_node_count => tnde_get_node_count Function
procedure , public :: get_node_natural_coordinates => de_get_node_natural_coordinates Function
procedure , public :: jacobian => de_jacobian Function
procedure , public :: mass_matrix => de_mass_matrix Function
procedure , public :: shape_function_matrix => tnde_shape_function_matrix Function
procedure , public :: stiffness_matrix => se_stiffness_matrix Function
procedure , public :: strain => e_strain Function
procedure , public :: strain_displacement_matrix => tnde_strain_disp_matrix Function
procedure , public :: stress => e_stress Function

type, public, extends(discrete_element) ::  two_node_discrete_element

Defines a discrete element that connects two nodes and acts along a single axis.

Components

Type Visibility Attributes Name Initial
real(kind=real64), public, dimension(3) :: direction = 0.0d0

The unit vector defining the user-supplied element axis. Only the leading components corresponding to the element dimensionality are used. This value is used only if use_direction is true.

type(material), public :: material

The material.

type(node), public :: node_1

The first node of the element (s = -1).

type(node), public :: node_2

The second node of the element (s = 1).

logical, public :: use_direction = .false.

True if the element axis is defined by direction; else, false if the axis is defined by the vector from node 1 to node 2.

Type-Bound Procedures

procedure , public :: axis => tnde_axis Function
procedure (element_const_matrix_function) , public , pass :: constitutive_matrix
procedure , public :: damping_matrix => de_damping_matrix Function
procedure , public :: evaluate_shape_function => tnde_shape_function Function
procedure , public :: external_force_vector => de_ext_force_vector Function
procedure (element_query) , public , pass :: get_dimensionality
procedure , public :: get_dof_per_node => tnde_dof_per_node Function
procedure , public :: get_node => tnde_get_node Function
procedure , public :: get_node_count => tnde_get_node_count Function
procedure , public :: get_node_natural_coordinates => de_get_node_natural_coordinates Function
procedure , public :: jacobian => de_jacobian Function
procedure , public :: mass_matrix => de_mass_matrix Function
procedure , public :: shape_function_matrix => tnde_shape_function_matrix Function
procedure , public :: stiffness_matrix => de_stiffness_matrix Function
procedure , public :: strain => e_strain Function
procedure , public :: strain_displacement_matrix => tnde_strain_disp_matrix Function
procedure , public :: stress => e_stress Function